Dans la classe UserInterface du projet zuul-with-images de l'exercice 7.18.6, on utilise l'interface ActionListener (qui contient uniquement la méthode actionPerformed), mais il y a 3 façons d'ajouter un "écouteur d'action" à un composant, tel qu'un bouton ou un champ de saisie :
1) la plus simple (sauf s'il y a beaucoup de composants) :
bouton.addActionListener( this );
==> la classe courante contient directement la méthode actionPerformed
2) la plus claire (mais peut créer beaucoup de classes) :
bouton.addActionListener( myButtonListener );
==> myButtonListener est une instance d'une classe (à créer) contenant la méthode actionPerformed
3) la plus élégante (surtout lorsqu'il y a beaucoup de composants) :
bouton.addActionListener( new ActionListener() {
public void actionPerformed(...) { instructions }
} );
==> On crée une classe anonyme (puisqu'on ne lui donne pas de nom, le compilateur s'en chargera -- voir ci-dessous --) qui implémente l'interface ActionListener et donc contient juste la méthode actionPerformed.
Cette écriture est équivalente à (remplace avantageusement) :
private class MaClasse$1 implements ActionListener {
public void actionPerformed(...) { instructions }
} // MaClasse$1
bouton.addActionListener( new MaClasse$1() );